/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lista4_Num1_ClinicaNutricao;

import model.Paciente;
import model.ResultadoAvaliacao;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;

/**
 *
 * @author Kdc
 */
public class Rcq extends CalculosNutricionais {

    private double rcq;

    @Override
    public void calcula(Paciente p) {

        this.rcq = p.getMedidaCintura() / p.getMedidaQuadril();

    }

    @Override
    public void classifica(Paciente p) {

        String classificacao = "INDISPONIVEL";
        int idade = calculaIdade(p.getDataNascimento());

        if (p.getSexo() == 'M') {
            if (idade <= 29) {
                if (rcq < 0.83) {
                    classificacao = "Baixo";
                } else if (rcq >= 0.83 && rcq <= 0.88) {
                    classificacao = "Moderado";
                } else if (rcq >= 0.89 && rcq <= 0.94) {
                    classificacao = "Alto";
                } else if (rcq > 0.94) {
                    classificacao = "Muito Alto";
                }
            } else if (idade >= 30 && idade <= 39) {
                if (rcq < 0.84) {
                    classificacao = "Baixo";
                } else if (rcq >= 0.84 && rcq <= 0.91) {
                    classificacao = "Moderado";
                } else if (rcq >= 0.92 && rcq <= 0.96) {
                    classificacao = "Alto";
                } else if (rcq > 0.96) {
                    classificacao = "Muito Alto";
                }
            } else if (idade >= 40 && idade <= 49) {
                if (rcq < 0.88) {
                    classificacao = "Baixo";
                } else if (rcq >= 0.88 && rcq <= 0.95) {
                    classificacao = "Moderado";
                } else if (rcq >= 0.96 && rcq <= 1.00) {
                    classificacao = "Alto";
                } else if (rcq > 1.00) {
                    classificacao = "Muito Alto";
                }
            } else if (idade >= 50 && idade <= 59) {
                if (rcq < 0.9) {
                    classificacao = "Baixo";
                } else if (rcq >= 0.9 && rcq <= 0.96) {
                    classificacao = "Moderado";
                } else if (rcq >= 0.97 && rcq <= 1.02) {
                    classificacao = "Alto";
                } else if (rcq > 1.02) {
                    classificacao = "Muito Alto";
                }
            } else if (idade > 59) {
                if (rcq < 0.91) {
                    classificacao = "Baixo";
                } else if (rcq >= 0.91 && rcq <= 0.98) {
                    classificacao = "Moderado";
                } else if (rcq >= 0.99 && rcq <= 1.03) {
                    classificacao = "Alto";
                } else if (rcq > 1.03) {
                    classificacao = "Muito Alto";
                }
            }

        } //para o sexo feminino
        else {
            if (idade <= 29) {
                if (rcq < 0.71) {
                    classificacao = "Baixo";
                } else if (rcq >= 0.71 && rcq <= 0.77) {
                    classificacao = "Moderado";
                } else if (rcq >= 0.78 && rcq <= 0.82) {
                    classificacao = "Alto";
                } else if (rcq > 0.82) {
                    classificacao = "Muito Alto";
                }
            } else if (idade >= 30 && idade <= 39) {
                if (rcq < 0.72) {
                    classificacao = "Baixo";
                } else if (rcq >= 0.72 && rcq <= 0.78) {
                    classificacao = "Moderado";
                } else if (rcq >= 0.79 && rcq <= 0.84) {
                    classificacao = "Alto";
                } else if (rcq > 0.84) {
                    classificacao = "Muito Alto";
                }
            } else if (idade >= 40 && idade <= 49) {
                if (rcq < 0.73) {
                    classificacao = "Baixo";
                } else if (rcq >= 0.73 && rcq <= 0.79) {
                    classificacao = "Moderado";
                } else if (rcq >= 0.80 && rcq <= 0.87) {
                    classificacao = "Alto";
                } else if (rcq > 0.87) {
                    classificacao = "Muito Alto";
                }
            } else if (idade >= 50 && idade <= 59) {
                if (rcq < 0.74) {
                    classificacao = "Baixo";
                } else if (rcq >= 0.74 && rcq <= 0.81) {
                    classificacao = "Moderado";
                } else if (rcq >= 0.82 && rcq <= 0.88) {
                    classificacao = "Alto";
                } else if (rcq > 0.88) {
                    classificacao = "Muito Alto";
                }
            } else if (idade > 59) {
                if (rcq < 0.76) {
                    classificacao = "Baixo";
                } else if (rcq >= 0.76 && rcq <= 0.83) {
                    classificacao = "Moderado";
                } else if (rcq >= 0.84 && rcq <= 0.90) {
                    classificacao = "Alto";
                } else if (rcq > 0.90) {
                    classificacao = "Muito Alto";
                }
            }

        }

        p.addResultado(new ResultadoAvaliacao(this.rcq, classificacao, "RCQ"));

    }

    private int calculaIdade(String pDataNascimento) {

        int idade;
        int month1, month2, day1, day2, year1, year2;

        Date dataAt = new Date(System.currentTimeMillis());
        SimpleDateFormat fd = new SimpleDateFormat("dd/MM/yyyy");

        String dataAtual = String.valueOf(fd.format(dataAt));

        StringTokenizer atual, nascimento;

        atual = new StringTokenizer(dataAtual, "/");
        nascimento = new StringTokenizer(pDataNascimento, "/");

        //Pegando DIA, MES, ANO da data Atual
        day1 = Integer.parseInt(atual.nextToken());
        month1 = Integer.parseInt(atual.nextToken());
        year1 = Integer.parseInt(atual.nextToken());

        //Pegando DIA, MES, ANO da data de Aniversario
        day2 = Integer.parseInt(nascimento.nextToken());
        month2 = Integer.parseInt(nascimento.nextToken());
        year2 = Integer.parseInt(nascimento.nextToken());

        idade = year1 - year2;

        if ((month1 < month2) || ((month1 == month2) && (day1 < day2))) {
            idade -= 1;
        }

        return idade;

    }

}
